跳到主要内容

MDX函数

MDX(Multidimensional Expressions)是一种多维数据分析语言,主要用于OLAP(On-Line Analytical Processing)系统中的多维数据查询、分析、统计和报表等领域的应用。Datafor通过MDX函数和MDX查询语句来实现对多维数据的访问、聚合、筛选、计算等操作。Datafor中的计算指标是通过MDX函数和MDX查询语句来定义和计算的。

MDX 函数是 MDX 语言中的一种重要元素,用于处理多维数据,包括多维数据的访问、聚合、筛选、计算等。MDX 函数可以分为以下几类:

  1. 聚合函数:聚合函数是用来汇总数据的函数,通常用于处理数据集中某个字段的总数、平均值、最大值、最小值等统计信息。聚合函数包括 COUNT、SUM、MIN、MAX、AVG 等。
  2. 集合函数:集合函数是用于操作集合的函数,包括并集、交集、补集等。这些函数通常用于多维数据的查询与分析,以获取特定的数据。集合函数包括 INTERSECT、UNION、COMPLEMENT 等。
  3. 成员函数:成员函数用于从维度层次结构中获取成员、属性等信息。这些函数通常用于多维数据的查询与分析,以获取特定的数据。成员函数包括 MEMBER、DIMENSION、LEVEL 等。
  4. 时间函数:时间函数是用于处理与时间相关的数据,包括日期加减、时间戳转换、日期格式化等。这些函数通常用于多维数据的查询与分析,以获取特定的数据。时间函数包括 DATEADD、TIMESTAMP、FORMAT 等。
  5. 逻辑函数:逻辑函数是用于处理逻辑判断与运算的函数,包括 IF、CASE、AND、OR、NOT 等。这些函数通常用于多维数据的查询与分析,以获取特定的数据。
  6. 字符串函数:字符串函数是用于处理字符串的函数,包括字符串拼接、字符串替换、字符串格式化等。这些函数通常用于多维数据的查询与分析,以获取特定的数据。字符串函数包括 CONCATENATE、REPLACE、FORMATSTRING 等。
  7. 数学函数:数学函数是用于进行数学计算的函数,包括绝对值、平方根、指数等。这些函数通常用于多维数据的查询与分析,以获取特定的数据。数学函数包括 ABS、SQRT、EXP 等。
  8. 类型转换:类型转换函数是用于进行数据类型转换的函数,包括将字符串转换为数值、将数值转换为字符串、将日期转换为字符串等。这些函数通常用于多维数据的查询与分析,以获取特定的数据。类型转换函数包括 CSTR、CINT、CDATE 等。

聚合函数

函数名称描述语法样例
COUNT计算成员或元素的数量COUNT( [Set_Expression] )COUNT( {[Measures].[Sales]} )
SUM计算成员或元素的累加值SUM( [Set_Expression] )SUM( {[Measures].[Sales]} )
AVG计算成员或元素的平均值AVG( [Set_Expression] )AVG( {[Measures].[Sales]} )
MIN计算成员或元素的最小值MIN( [Set_Expression] )MIN( {[Measures].[Sales]} )
MAX计算成员或元素的最大值MAX( [Set_Expression] )MAX( {[Measures].[Sales]} )
DISTINCTCOUNT计算一个集合中不同成员的数量DISTINCTCOUNT( [Set_Expression] )DISTINCTCOUNT( {[Customers].Members} )
AGGREGATE在执行聚合时,返回指定元素的聚合值AGGREGATE( [Value] )AGGREGATE( {[Time].[1997].[Q1], [Time].[1997].[Q2]} * {[Measures].[Sales]})

集合函数

名称描述语法样例
FILTER从集合中返回满足指定条件的成员或元素FILTER( [Set_Expression], [Boolean_Expression] )FILTER( {[Customers].Members}, [Measures].[Sales] > 1000 )
NONEMPTY返回那些与查询中的其他维度成员有交集的非空成员或元素NONEMPTY( [Set_Expression] )NONEMPTY( {[Customers].Members} * {[Time].[1997].[Q1]})
ORDER返回按指定条件排序后的集合中的成员或元素ORDER( [Set_Expression], [Numeric_Expression], [Order_Type] )ORDER( {[Customers].Members}, [Measures].[Sales], DESC )
GENERATE返回由一组从第一集合中选定的成员和一个生成表达式生成的成员组成的集合GENERATE( [Set_Expression], [Generator_Expression] )GENERATE( {[Customers].Members}, {[Products].Members}.CurrentMember.Name )
UNION返回两个集合的并UNION( [Set_Expression_1], [Set_Expression_2] )UNION( {[Customers].[USA].[CA], [Customers].[USA].[OR]}, {[Customers].[USA].[WA]]}
INTERSECT返回两个集合的交集INTERSECT( [Set_Expression_1], [Set_Expression_2] )INTERSECT( {[Customers].[USA].[CA], [Customers].[USA].[OR]}, {[Customers].[USA].[WA]]}
EXCEPT返回两个集合的差集EXCEPT( [Set_Expression_1], [Set_Expression_2] )EXCEPT( {[Customers].[USA].[CA], [Customers].[USA].[OR]}, {[Customers].[USA].[WA]]}
DISTINCT返回由一个集合中的所有不同成员或元素组成的子集DISTINCT( [Set_Expression] )DISTINCT( {[Customers].Members} )
CROSSJOIN返回两个或多个集合的笛卡尔积CROSSJOIN( [Set_Expression_1], [Set_Expression_2], ... )CROSSJOIN( {[Customers].[USA].[CA], [Customers].[USA].[OR]}, {[Products].Members} )
TUPLE创建一个包含多个元素的元组TUPLE( { [Set_Expression_1], [Set_Expression_2], ... } )TUPLE( { [Customers].[USA].[CA], [Time].[1997].[Q1] } )

成员函数

名称描述语法样例
CURRENTMEMBER返回当前上下文中的成员CURRENTMEMBER{[Customers].[USA].[CA]}
PARENT返回指定成员的父级成员PARENT( [Member_Expression] )PARENT( {[Customers].[USA].[CA]} )
CHILDREN返回指定成员的所有子成员CHILDREN( [Member_Expression] )CHILDREN( {[Time].[1997].[Q1]})
SIBLINGS返回指定成员的兄弟成员SIBLINGS( [Member_Expression] )SIBLINGS( {[Customers].[USA].[CA]})
ANCESTOR返回指定成员的所有祖先成员ANCESTOR( [Member_Expression], [Numeric_Expression] )ANCESTOR( {[Customers].[USA].[CA]}, 2)
DESCENDANT返回指定成员的所有后代成员DESCENDANT( [Member_Expression], [Numeric_Expression] )DESCENDANT( {[Customers].[USA]}, 2)
LEAD从当前成员开始,返回指定数量的下一级成员LEAD( [Member_Expression], [Numeric_Expression] )LEAD( {[Time].[1997].[Q1]}, 2)
LAG从当前成员开始,返回指定数量的上一级成员LAG( [Member_Expression], [Numeric_Expression] )LAG( {[Time].[1997].[Q1]}, 2)
FIRSTCHILD返回指定成员的第一个子成员FIRSTCHILD( [Member_Expression] )FIRSTCHILD( {[Time].[1997].[Q1]})
LASTCHILD返回指定成员的最后一个子成员LASTCHILD( [Member_Expression] )LASTCHILD( {[Time].[1997].[Q1]})
HIERARCHIZE以指定的顺序将成员重新排列,使其形成层次结构HIERARCHIZE( [Set_Expression] )HIERARCHIZE( {[Customers].[USA].[CA], [Customers].[USA].[OR], [Customers].[USA].[WA]})
STRTOSET将字符串解释为 MDX 集合表达式STRTOSET( [String_Expression] )STRTOSET( "{[Customers].[USA].[CA], [Customers].[USA].[OR], [Customers].[USA].[WA]}" )
STRTOMEMBER将字符串解释为 MDX 成员表达式STRTOMEMBER( [String_Expression] )STRTOMEMBER( "[Customers].[USA].[CA]" )
TAIL返回指定成员的除第一个子成员以外的所有后代成员TAIL( [Member_Expression], [Numeric_Expression] )TAIL( {[Customers].[USA]}, 1)
HEAD返回指定成员的除最后一个子成员以外的所有子孙成员HEAD( [Member_Expression], [Numeric_Expression] )HEAD( {[Customers].[USA]}, 1)
ASCENDANTS返回指定成员的所有祖先成员,按照层次结构从低到高排序ASCENDANTS( [Member_Expression] )ASCENDANTS( {[Customers].[USA].[CA]})
DESCENDANTS返回指定成员的所有后代成员,按照层次结构从高到低排序DESCENDANTS( [Member_Expression] )DESCENDANTS( {[Customers].[USA]})
LEVELS返回指定集合中的所有层次结构LEVELS( [Set_Expression] )LEVELS( {[Customers].Members})
MEMBERS返回指定维度中的所有成员MEMBERS( [Dimension_Expression], [Optional_Set_Expression] )MEMBERS( [Customers] )
DIMENSIONS返回一个包含查询中使用的所有维度的集合DIMENSIONSDIMENSIONS
HIERARCHY返回指定成员所在的层次结构HIERARCHY( [Member_Expression] )HIERARCHY( {[Customers].[USA].[CA]})
MEMBERCAPTION返回指定成员的标题MEMBERCAPTION( [Member_Expression] )MEMBERCAPTION( {[Customers].[USA].[CA]})
MEMBERNAME返回指定成员的名称MEMBERNAME( [Member_Expression] )MEMBERNAME( {[Customers].[USA].[CA]})

时间函数

函数名称描述和说明语法样例
NOW返回当前日期和时间NOWNOW
TODAY返回当前日期TODAYTODAY
YEARTODATE返回从年初到指定日期的时间段YEARTODATE( [Date_Member] )YEARTODATE( [Time].[1997].[Q1] )
QUARTERSTODATE返回从季度初到指定日期的时间段QUARTERSTODATE( [Date_Member] )QUARTERSTODATE( [Time].[1997].[Q1] )
MONTHSTODATE返回从月初到指定日期的时间段MONTHSTODATE( [Date_Member] )MONTHSTODATE( [Time].[1997].[Q1] )
WEEKSTODATE返回从周初到指定日期的时间段WEEKSTODATE( [Date_Member] )WEEKSTODATE( [Time].[1997].[W1] )
DAYSTODATE返回从日初到指定日期的时间段DAYSTODATE( [Date_Member] )DAYSTODATE( [Time].[1997].&[19970401] )
DATEADD返回指定时间间隔后的日期DATEADD( [Time_Interval], [Date_Member] )DATEADD( "YY", 1, [Time].[1997].[Q1] )
DATEDIFF返回两个日期之间的时间间隔DATEDIFF( [Time_Interval], [Date_Member_1], [Date_Member_2] )DATEDIFF( "YY", [Time].[1997].[Q1], [Time].[1998].[Q1] )
PARALLELPERIOD返回前一个与当前成员相同的时间周期的成员PARALLELPERIOD( [Time_Interval], [Numeric_Expression], [Member_Expression] )PARALLELPERIOD( "Q", 2, [Time].[1997].[Q1] )
OPENINGPERIOD返回从指定日期开始到时间周期的第一个成员的时间段OPENINGPERIOD( [Time_Interval], [Date_Member] )OPENINGPERIOD( "Q", [Time].[1997].[Q2].[4] )
CLOSINGPERIOD返回从指定日期开始到时间周期的最后一个成员的时间段CLOSINGPERIOD( [Time_Interval], [Date_Member] )CLOSINGPERIOD( "Q", [Time].[1997].[Q2].[4] )
PERIODSTODATE返回从时间周期开始到指定日期的时间段PERIODSTODATE( [Time_Interval], [Date_Member] )PERIODSTODATE( "Q", [Time].[1997].[Q1] )
DATESBETWEEN返回两个日期之间的所有日期DATESBETWEEN( [Date_Member_1], [Date_Member_2] )DATESBETWEEN( [Time].[1997].[Q1], [Time].[1998].[Q1] )

注意:TIMEINTERVAL 参数是字符串,有以下可选值:

  • YY、YYYY:年。
  • Q:季度。
  • M、MM:月。
  • D、DD:日。
  • W、WW:周。
  • H、HH:小时。
  • N、NN:分钟。
  • S、SS:秒。

逻辑函数

函数名称描述和说明语法样例
IIF根据条件返回两个可能值之一IIF( [Boolean_Expression], [Value_If_True], [Value_If_False] )IIF( [Measures].[Sales] > 5000, "High", "Low" )
SWITCH根据多个条件返回不同的值SWITCH( [Numeric_Expression_1], [Value_1], [Numeric_Expression_2], [Value_2], ... )SWITCH( [Measures].[Sales], 100, "Not 100", 200, "Not 200", "Unknown" )
AND如果所有条件都为真,则返回 TRUEAND( [Boolean_Expression_1], [Boolean_Expression_2], ... )AND( [Measures].[Sales] > 5000, [Time].[1997].[Q1] )
OR如果任何条件均为真,则返回 TRUEOR( [Boolean_Expression_1], [Boolean_Expression_2], ... )OR( [Measures].[Sales] > 5000, [Time].[1997].[Q1] )
NOT返回单个布尔表达式的相反值(如果为 TRUE,则返回 FALSE,反之亦然)NOT( [Boolean_Expression] )NOT( [Measures].[Sales] > 5000 )
EMPTY如果表达式的计算结果为空,则返回 TRUE;否则返回 FALSEEMPTY( [Value] )EMPTY( [Measures].[Sales])
EXISTING在当前上下文中返回指定维度中已经存在的成员EXISTING( [Set_Expression] )EXISTING( [Customers].[USA].[CA] )
NONEMPTYCROSSJOIN以指定的维度返回非空成员的笛卡尔积NONEMPTYCROSSJOIN( [Set_Expression_1], [Set_Expression_2], ... )NONEMPTYCROSSJOIN( { [Customers].[USA].[CA], [Customers].[USA].[WA] }, { [Time].[1997].[Q1], [Time].[1997].[Q2] } )
TUPLETOSET将元组转换为集合TUPLETOSET( [Tuple_Expression] )TUPLETOSET( ( [Customers].[USA].[CA], [Time].[1997].[Q1] ) )

注意:BOOLEAN_EXPRESSION 参数指的是返回 TRUE 或 FALSE 的表达式,例如 [Measures].[Sales] > 5000。

字符串函数

函数名称描述语法样例
CONCAT返回两个字符串的拼接结果CONCAT( [String_Expression_1], [String_Expression_2] )CONCAT( "Hello", "World" )
LEFT返回字符串的左侧指定数量的字符LEFT( [String_Expression], [Numeric_Expression] )LEFT( "Hello", 3 )
RIGHT返回字符串的右侧指定数量的字符RIGHT( [String_Expression], [Numeric_Expression] )RIGHT( "Hello", 3 )
MID返回字符串中指定范围内的字符MID( [String_Expression], [Numeric_Expression_1], [Numeric_Expression_2] )MID( "Hello", 2, 3 )
STRCOMP比较两个字符串,并返回一个指示它们是否相等的值STRCOMP( [String_Expression_1], [String_Expression_2] )STRCOMP( "Hello", "HELLO" )
STRTODATE将字符串解释为日期STRTODATE( [String_Expression], [Format_String] )STRTODATE( "01/01/1997", "MM/DD/YYYY" )
LOWER将字符串转换为小写LOWER( [String_Expression] )LOWER( "HELLO" )
UPPER将字符串转换为大写UPPER( [String_Expression] )UPPER( "hello" )
STRLEN返回字符串的长度STRLEN( [String_Expression] )STRLEN( "Hello" )
REPLACE替换字符串中的指定字符REPLACE( [String_Expression], [Find_String], [Replace_String] )REPLACE( "Hello World", "World", "Mondrian" )
INSTR返回字符串中指定子串第一次出现的位置INSTR( [String_Expression], [Search_String] )INSTR( "Hello World", "World" )
LEFTSTR返回字符串的左侧指定数量的字符(与 LEFT 函数相同)LEFTSTR( [String_Expression], [Numeric_Expression] )LEFTSTR( "Hello", 3 )

数学函数

函数名称描述和说明语法样例
ABS返回表达式的绝对值ABS( [Numeric_Expression] )ABS( -3 )
ROUND返回表达式的四舍五入结果ROUND( [Numeric_Expression] )ROUND( 3.14159, 2 )
CEILING返回表达式的上限值,也就是大于或等于表达式的最小整数值CEILING( [Numeric_Expression] )CEILING( 3.14159 )
FLOOR返回表达式的下限值,也就是小于或等于表达式的最大整数值FLOOR( [Numeric_Expression] )FLOOR( 3.14159 )
EXP返回 e 的指定次幂EXP( [Numeric_Expression] )EXP( 2 )
LOG返回表达式的自然对数LOG( [Numeric_Expression] )LOG( 10 )
POWER返回给定数字的给定次幂POWER( [Numeric_Expression_1], [Numeric_Expression_2] )POWER( 2, 3 )
SQRT返回表达式的平方根SQRT( [Numeric_Expression] )SQRT( 25 )
MOD返回两个数相除的余数MOD( [Numeric_Expression_1], [Numeric_Expression_2] )MOD( 7, 3 )
SIGN返回表达式的符号(1:正数,-1:负数,0:零)SIGN( [Numeric_Expression] )SIGN( 3 )
SIN返回指定角度的正弦值SIN( [Numeric_Expression] )SIN( 45 )
COS返回指定角度的余弦值COS( [Numeric_Expression] )COS( 45 )
TAN返回指定角度的正切值TAN( [Numeric_Expression] )TAN( 45 )
ASIN返回指定数字的反正弦值ASIN( [Numeric_Expression] )ASIN( 0.5 )
ACOS返回指定数字的反余弦值ACOS( [Numeric_Expression] )ACOS( 0.5 )

类型转换

函数名称描述和说明语法样例
CBOOL将表达式转换为布尔型CBOOL( [Value_Expression] )CBOOL( "True" )
CSTR将表达式转换为字符串类型CSTR( [Value_Expression] )CSTR( 3.14159 )
CINT将表达式转换为整型CINT( [Value_Expression] )CINT( 3.14159 )
CDbl将表达式转换为双精度浮点型CDbl( [Value_Expression] )CDbl( 3 )
CDEC将表达式转换为 Decimal 类型(精度更高的浮点型)CDEC( [Value_Expression] )CDEC( 3.14159 )
CDATE将表达式转换为日期型CDATE( [Value_Expression] )CDATE( "01/01/1997" )
CVAR将表达式转换为变量类型CVAR( [Value_Expression] )CVAR( "Hello" )
CBYTE将表达式转换为 Byte 类型(0-255 之间的整数)CBYTE( [Value_Expression] )CBYTE( 255 )
CSHORT将表达式转换为 Short 类型(-32768 到 32767 之间的整数)CSHORT( [Value_Expression] )CSHORT( 32000 )
CLNG将表达式转换为 Long 类型(-2,147,483,648 到 2,147,483,647 之间的整数)CLNG( [Value_Expression] )CLNG( 2147483647 )
CSNG将表达式转换为 Single 类型(-3.402823E38 到 3.402823E38 之间的单精度浮点型)CSNG( [Value_Expression] )CSNG( 3.14159 )
CBYTE将表达式转换为 Byte 类型(0-255 之间的整数)CBYTE( [Value_Expression] )CBYTE( 255 )
CSTRTOSET将指定的字符串转换为集合CSTRTOSET( [String_Expression] )CSTRTOSET( "{ [Customers].[USA].[CA], [Customers].[USA].[WA] }" )